package com.main.controller;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.generico.dto.ctg.CtgCatalogo;
import com.generico.exception.AsiWebException;
import com.main.cliente.dto.Pedido;
import com.main.cliente.dto.SgiPersona;
import com.main.dao.AsignacionTareasDao;
import com.main.dao.AsistenciaTecnicaDAO;
import com.main.dao.ClienteDAO;
import com.main.dao.InstaladorDao;
import com.main.dao.PedidoDAO;
import com.main.dao.SgiPersonaDao;
import com.main.java.AsignacionTarea;
import com.main.java.AsistenciaTecnica;
import com.main.java.Cliente;
import com.main.java.Empleado;
import com.main.java.Instalador;
import com.main.java.Producto;
import com.main.service.AsistenciaTecnicaService;
import com.web.security.CustomUser;
import com.web.util.GenericoUtil;

@Controller
@RequestMapping("/empleado")
public class AsignacionTareasController extends BaseController{
	
	@Autowired
	private PedidoDAO pedidoDAO;
	
	@Autowired
	private AsignacionTareasDao asignacionTareasDao;
	
	@Autowired
	private InstaladorDao instaladorDao;

	@RequestMapping(value = "/asignacionTareasView")
	public String asignacionTareas(HttpServletRequest request, ModelMap model) {
		model.put("listaGrupo", JSONArray.fromObject(asignacionTareasDao.obtenerGrupoInstalador()));
		model.put("pedidosFinalizados", JSONArray.fromObject(pedidoDAO.obtenerPedidosFinalizados(GenericoUtil.getCtgSucursalIdFromAcegi())));
		model.put("usuarioId", GenericoUtil.getSgdUsuarioIdFromAcegi());
		model.put("userName", GenericoUtil.getUserName());
		model.put("rol", GenericoUtil.getRol().toString());
		return "empleado/asignacionTareas";
		
	}
	
	@RequestMapping(value = "/guardarAsignacionTarea", method = RequestMethod.POST)
	public void guardarAsignacionTarea(HttpServletResponse response,
			@RequestParam(value = "grupoId") Long grupoId,
			@RequestParam(value = "pedidoId") Long pedidoId){
		Map<String, Object> result = new HashMap<String, Object>();
		String nombreGrupo = StringUtils.EMPTY;
		try{
			if(pedidoId == null){
				result.put(FAILURE, true);
				result.put(MESSAGE, "Debe Asignar una Tarea Para Continuar");
			}else{
				
				List<Object[]> infoGrupoLista = instaladorDao.obtenerInstaladorPorGrupoId(grupoId);
				for (int i = 0; i < infoGrupoLista.size(); i++) {
					AsignacionTarea asignacionTarea = new AsignacionTarea();
					Pedido pedido = new Pedido();
					Instalador instalador = new Instalador();
					instalador = instaladorDao.encInstaladorPorId(Long.parseLong(infoGrupoLista.get(i)[0].toString()));
					pedido = pedidoDAO.encontrarPedidoPorId(pedidoId);
					pedido.setPedidoEstado("4");
					pedidoDAO.guardarPedido(pedido);
					asignacionTarea.setAsignacionTareaEstado(false);
					asignacionTarea.setAsignacionTareaFecha(GenericoUtil.dateFormatAsDD_MM_YYYY___HH_MM_SS_A.format(new Date()));
					asignacionTarea.setInstaladorId(instalador);
					asignacionTarea.setPedidoTerminadoId(pedido);
					asignacionTareasDao.guardarOActualizarAsignacionTareas(asignacionTarea);
					
					nombreGrupo = instalador.getInstaladorNombreGrupo();
					
				}

				
				
				
				
				
				
				result.put(MESSAGE, "Pedido Asignado a grupo " + nombreGrupo);
				result.put(SUCCESS, true);
				List<Object[]> pedidosFinalizados = pedidoDAO.obtenerPedidosFinalizados(GenericoUtil.getCtgSucursalIdFromAcegi());
				result.put("pedidosFinalizados", JSONArray.fromObject(pedidosFinalizados));
			}
			

		} catch (AsiWebException e) {
			result.put(FAILURE, true);
			result.put(MESSAGE, GenericoUtil.getExceptionMessage(e));
			logger.error(e, e);
		} catch (Exception e) {
			result.put(FAILURE, true);
			result.put(MESSAGE, GenericoUtil.ERROR_MESSAGE);
			logger.error(e, e);
		}
		serializeObject(result, response);
	}
	
}
	
	
	
	
	

